package com.fiap.to;

import java.io.Serializable;
import java.util.Calendar;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "AM_CLIENTE")
public class ClienteTO implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GenericGenerator(name = "seq_cliente", strategy = "increment")
	@GeneratedValue(generator = "seq_cliente")
	@Column(name = "ID_CLIENTE")
	private int id_cliente;
	@Column(length = 45)
	private String indicacao;
	@Column(name = "DT_NASCIMENTO")
	@Temporal(TemporalType.DATE)
	private Calendar dataNascimento;
	@Column(length = 12, nullable = false)
	private String rg;
	@Column(length = 14, nullable = false)
	private String cpf;
	@Temporal(TemporalType.DATE)
	@Column(name = "DT_CADASTRO")
	private Calendar dataCadastro;
	@OneToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "ID_PESSOA")
	private PessoaTO pessoa;
	@Column(length = 200)
	private String obs;
	@OneToMany(mappedBy = "dono", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
	private List<VeiculoTO> carros;
	@OneToOne(mappedBy = "cliente", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
	private ContaClienteTO conta;
	@Column
	private String apelido;
	
	@PrePersist
	private void executaAntesDePersistir() {
		System.out.println("Persistindo...");
	}
	
	public ClienteTO() {
		super();
		// TODO Auto-generated constructor stub
	}	

	/**
	 * @param id_cliente
	 * @param indicacao
	 * @param dataNascimento
	 * @param rg
	 * @param cpf
	 * @param dataCadastro
	 * @param pessoa
	 * @param obs
	 * @param carros
	 * @param conta
	 * @param apelido
	 */
	public ClienteTO(int id_cliente, String indicacao, Calendar dataNascimento,
			String rg, String cpf, Calendar dataCadastro, PessoaTO pessoa,
			String obs, List<VeiculoTO> carros, ContaClienteTO conta,
			String apelido) {
		super();
		this.id_cliente = id_cliente;
		this.indicacao = indicacao;
		this.dataNascimento = dataNascimento;
		this.rg = rg;
		this.cpf = cpf;
		this.dataCadastro = dataCadastro;
		this.pessoa = pessoa;
		this.obs = obs;
		this.carros = carros;
		this.conta = conta;
		this.apelido = apelido;
	}

	public int getId_cliente() {
		return id_cliente;
	}

	public void setId_cliente(int id_cliente) {
		this.id_cliente = id_cliente;
	}

	public String getIndicacao() {
		return indicacao;
	}

	public void setIndicacao(String indicacao) {
		this.indicacao = indicacao;
	}

	public Calendar getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Calendar getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Calendar dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public PessoaTO getPessoa() {
		return pessoa;
	}

	public void setPessoa(PessoaTO pessoa) {
		this.pessoa = pessoa;
	}

	public String getObs() {
		return obs;
	}

	public void setObs(String obs) {
		this.obs = obs;
	}

	public List<VeiculoTO> getCarros() {
		return carros;
	}

	public void setCarros(List<VeiculoTO> carros) {
		this.carros = carros;
	}

	public ContaClienteTO getConta() {
		return conta;
	}

	public void setConta(ContaClienteTO conta) {
		this.conta = conta;
	}

	public String getApelido() {
		return apelido;
	}

	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

}
